Entity Framework এ Validation এবং Data Annotation

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework)
227
227

Entity Framework (EF) তে Validation এবং Data Annotation হল মডেল ক্লাসের ডেটা সঠিকতা নিশ্চিত করার দুটি গুরুত্বপূর্ণ টুল। Validation ব্যবহার করে আপনি ইনপুট ডেটার সঠিকতা যাচাই করতে পারেন এবং Data Annotation দ্বারা মডেল প্রোপার্টিতে ভ্যালিডেশন রুলস অ্যাপ্লাই করতে পারেন।


Data Annotation কী?

Data Annotation হল একটি প্রযুক্তি যা সি# ক্লাসের প্রোপার্টিতে অ্যাট্রিবিউট ব্যবহার করে ডেটা ভ্যালিডেশন রুলস নির্ধারণ করে। Entity Framework যখন মডেল ক্লাসের উপর Data Annotations ব্যবহার করে, তখন এটি স্বয়ংক্রিয়ভাবে ভ্যালিডেশন চেক করবে এবং সঠিকতা যাচাই করার জন্য প্রোপার্টি লেভেলে রুলস প্রয়োগ করবে।


Data Annotation Attribute গুলি

Entity Framework এর মডেল ক্লাসে বিভিন্ন Data Annotation Attributes ব্যবহার করা হয়, যা ডেটা ভ্যালিডেশন করতে সহায়তা করে। কিছু সাধারণ Data Annotation Attributes নিচে আলোচনা করা হলো:

1. [Required]

এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি প্রোপার্টিকে বাধ্যতামূলক হিসেবে চিহ্নিত করতে পারেন। অর্থাৎ, ফিল্ডটি খালি রাখা যাবে না।

public class Employee
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Employee name is required.")]
    public string Name { get; set; }
}

এখানে, Name প্রোপার্টি খালি রাখা যাবে না এবং যদি খালি রাখা হয়, তবে "Employee name is required." এরর মেসেজ দেখানো হবে।

2. [StringLength]

এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি স্ট্রিং প্রোপার্টির সর্বাধিক দৈর্ঘ্য নির্ধারণ করতে পারেন।

public class Employee
{
    public int Id { get; set; }

    [StringLength(50, ErrorMessage = "Name cannot be longer than 50 characters.")]
    public string Name { get; set; }
}

এখানে, Name ফিল্ডের দৈর্ঘ্য ৫০ এর বেশি হতে পারবে না।

3. [Range]

এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি সংখ্যার জন্য সীমা নির্ধারণ করতে পারেন।

public class Employee
{
    public int Id { get; set; }

    [Range(18, 65, ErrorMessage = "Age must be between 18 and 65.")]
    public int Age { get; set; }
}

এখানে, Age প্রোপার্টি ১৮ এবং ৬৫ এর মধ্যে হতে হবে, অন্যথায় "Age must be between 18 and 65." এরর মেসেজ প্রদর্শিত হবে।

4. [EmailAddress]

এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি ইমেইল ফিল্ডের জন্য একটি ভ্যালিড ইমেইল ফর্ম্যাট নিশ্চিত করতে পারেন।

public class Employee
{
    public int Id { get; set; }

    [EmailAddress(ErrorMessage = "Please enter a valid email address.")]
    public string Email { get; set; }
}

এখানে, Email ফিল্ডটি একটি বৈধ ইমেইল ঠিকানা হতে হবে।

5. [Phone]

এই অ্যাট্রিবিউটটি ফোন নম্বরের বৈধতা নিশ্চিত করতে ব্যবহৃত হয়।

public class Employee
{
    public int Id { get; set; }

    [Phone(ErrorMessage = "Please enter a valid phone number.")]
    public string PhoneNumber { get; set; }
}

এখানে, PhoneNumber ফিল্ডে একটি বৈধ ফোন নম্বর থাকতে হবে।

6. [RegularExpression]

এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি কাস্টম নিয়মে ইনপুট ভ্যালিডেট করতে পারেন।

public class Employee
{
    public int Id { get; set; }

    [RegularExpression(@"^[A-Za-z0-9]+$", ErrorMessage = "Username can only contain letters and numbers.")]
    public string Username { get; set; }
}

এখানে, Username ফিল্ডে শুধুমাত্র ইংরেজি অক্ষর এবং সংখ্যা থাকতে পারবে, অন্য কিছু থাকলে "Username can only contain letters and numbers." এরর মেসেজ দেখানো হবে।

7. [Compare]

এই অ্যাট্রিবিউটটি দুটি প্রোপার্টির মান তুলনা করতে ব্যবহৃত হয়। এটি সাধারণত পাসওয়ার্ড এবং কনফার্ম পাসওয়ার্ড এর ক্ষেত্রে ব্যবহৃত হয়।

public class User
{
    public int Id { get; set; }

    [Required]
    public string Password { get; set; }

    [Required]
    [Compare("Password", ErrorMessage = "Passwords do not match.")]
    public string ConfirmPassword { get; set; }
}

এখানে, ConfirmPassword ফিল্ডটি Password এর সাথে মেলাতে হবে, অন্যথায় "Passwords do not match." এরর মেসেজ দেখানো হবে।


Data Annotation এর মাধ্যমে Validation কার্যকর করা

Entity Framework মডেল ক্লাসে Data Annotation অ্যাট্রিবিউট ব্যবহার করে আপনির ডেটার সঠিকতা যাচাই করা হয়, তবে এটির জন্য আপনাকে DbContext এর SaveChanges মেথড কল করার আগে Validation চেক চালাতে হয়। আপনি নিম্নলিখিত কোড ব্যবহার করে এটি বাস্তবায়ন করতে পারেন:

public class ApplicationDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    public override int SaveChanges()
    {
        var entries = ChangeTracker.Entries()
            .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);

        foreach (var entry in entries)
        {
            if (!entry.IsValid()) // মডেল ভ্যালিডেশন চেক
            {
                throw new InvalidOperationException("Validation failed.");
            }
        }

        return base.SaveChanges();
    }
}

এখানে, SaveChanges মেথডের মধ্যে আমরা ভ্যালিডেশন চেক করছি। যদি কোনো ইনপুট ফিল্ড ভুল থাকে, তাহলে এরর হ্যান্ডেল করা হবে।


Fluent API দিয়ে Validation

Fluent API ব্যবহার করে আপনি আরও কাস্টম ভ্যালিডেশন রুলস সেট করতে পারেন। Data Annotations এর সাথে কিছু সীমাবদ্ধতা থাকলেও, Fluent API এর মাধ্যমে আপনি অনেক বেশি কাস্টমাইজেশন করতে পারবেন।

public class EmployeeConfiguration : IEntityTypeConfiguration<Employee>
{
    public void Configure(EntityTypeBuilder<Employee> builder)
    {
        builder.Property(e => e.Name)
            .IsRequired()
            .HasMaxLength(50);

        builder.Property(e => e.Age)
            .HasDefaultValue(18);
    }
}

এখানে:

  • IsRequired() দিয়ে Name প্রোপার্টি কে বাধ্যতামূলক করা হয়েছে।
  • HasMaxLength() দিয়ে Name প্রোপার্টির সর্বোচ্চ দৈর্ঘ্য ৫০ ক্যারেক্টার পর্যন্ত সীমাবদ্ধ করা হয়েছে।
  • HasDefaultValue() দিয়ে Age প্রোপার্টির জন্য একটি ডিফল্ট মান ১৮ নির্ধারণ করা হয়েছে।

Client-side এবং Server-side Validation Integration

Data Annotation এবং Fluent API দিয়ে করা Validation ক্লায়েন্ট-সাইড এবং সার্ভার-সাইড উভয় জায়গাতেই কাজ করতে পারে। ASP.NET MVC বা ASP.NET Core এ jQuery Validation এবং Unobtrusive Validation ইনটিগ্রেশন এর মাধ্যমে ক্লায়েন্ট-সাইডে এই ভ্যালিডেশন চেক করা যেতে পারে।

@Html.ValidationMessageFor(model => model.Name)

এখানে, ValidationMessageFor ট্যাগটি আপনার মডেলের জন্য সঠিক Validation Message প্রদর্শন করবে।


সারাংশ

Entity Framework এ Validation এবং Data Annotation ব্যবহার করে আপনি ডেটার সঠিকতা সহজেই যাচাই করতে পারেন। Data Annotations দিয়ে মডেল প্রোপার্টিতে বিভিন্ন প্রকার ভ্যালিডেশন রুলস যোগ করা সম্ভব, যেমন Required, StringLength, Range, ইত্যাদি। এটির মাধ্যমে আপনি ডেটাবেসে ডেটা সঞ্চালন করার আগে ইনপুট ফিল্ডগুলির সঠিকতা নিশ্চিত করতে পারবেন।

common.content_added_by

Data Annotation Attribute ব্যবহার করে Model Validation

250
250

Entity Framework এবং ASP.NET Core এ Model Validation একটি গুরুত্বপূর্ণ বিষয়। এটি ব্যবহারকারীর ইনপুটের সঠিকতা নিশ্চিত করতে সাহায্য করে। Data Annotations হল একটি সহজ পদ্ধতি যা আপনাকে মডেল প্রোপার্টির ওপর বিভিন্ন বৈধতা (validation) বিধিনিষেধ আরোপ করতে দেয়। এগুলি এমন অ্যাট্রিবিউট যা মডেল ক্লাসের প্রপার্টির সাথে যুক্ত থাকে এবং যখন ডেটা সেভ বা সাবমিট করা হয়, তখন এগুলি পরীক্ষা করা হয়।

এখানে আমরা দেখব কিভাবে Data Annotation Attribute ব্যবহার করে মডেল ভ্যালিডেশন করা যায়।


প্রধান Data Annotation Attributes

ASP.NET Core বা Entity Framework এ বিভিন্ন Data Annotation অ্যাট্রিবিউট ব্যবহার করা হয়, যেমন:

  • Required
  • StringLength
  • Range
  • RegularExpression
  • EmailAddress
  • Compare
  • DataType
  • Range

প্রতিটি অ্যাট্রিবিউটের মাধ্যমে বিভিন্ন ধরণের ভ্যালিডেশন করা যায়। নিচে বিস্তারিতভাবে আলোচনা করা হলো।


1. Required Attribute

Required অ্যাট্রিবিউটটি ব্যবহার করা হয়, কোনো প্রপার্টি ফাঁকা না থাকা নিশ্চিত করার জন্য। এটি প্রোপার্টির মান অবশ্যই প্রদান করতে হবে।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    public int Age { get; set; }
}

এখানে, Name প্রপার্টি Required অ্যাট্রিবিউট ব্যবহার করে মার্ক করা হয়েছে। এর মানে, Name ফিল্ডটি ফাঁকা রাখা যাবে না এবং যদি ফাঁকা রাখা হয়, তাহলে কাস্টম মেসেজ "Name is required" দেখানো হবে।


2. StringLength Attribute

StringLength অ্যাট্রিবিউটটি ব্যবহার করে আপনি স্ট্রিং প্রপার্টির সর্বোচ্চ এবং সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করতে পারেন।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    [StringLength(50, MinimumLength = 2, ErrorMessage = "Name must be between 2 and 50 characters")]
    public string Name { get; set; }

    public int Age { get; set; }
}

এখানে, Name ফিল্ডের দৈর্ঘ্য ২ থেকে ৫০ অক্ষরের মধ্যে থাকতে হবে। এর বাইরে গেলে কাস্টম মেসেজ "Name must be between 2 and 50 characters" দেখানো হবে।


3. Range Attribute

Range অ্যাট্রিবিউটটি ব্যবহার করা হয় একটি প্রপার্টির মান নির্দিষ্ট পরিসরের মধ্যে থাকতে হবে, এমনভাবে সুনির্দিষ্ট করার জন্য। এটি সংখ্যার জন্য বিশেষভাবে কার্যকর।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    public string Name { get; set; }

    [Range(18, 100, ErrorMessage = "Age must be between 18 and 100")]
    public int Age { get; set; }
}

এখানে, Age প্রপার্টি ১৮ থেকে ১০০ এর মধ্যে থাকতে হবে। এই পরিসরের বাইরে গেলে কাস্টম মেসেজ দেখানো হবে: "Age must be between 18 and 100"।


4. RegularExpression Attribute

RegularExpression অ্যাট্রিবিউটটি একটি নির্দিষ্ট প্যাটার্নে ডেটা যাচাই করার জন্য ব্যবহৃত হয়। এটি সাধারণত ইমেইল বা ফোন নম্বরের মতো নির্দিষ্ট ফরম্যাটের জন্য ব্যবহার করা হয়।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    [RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Name can only contain letters")]
    public string Name { get; set; }

    public int Age { get; set; }
}

এখানে, Name প্রপার্টি শুধুমাত্র অক্ষর (letters) গ্রহণ করবে। অন্য কিছু ইনপুট দিলে কাস্টম মেসেজ "Name can only contain letters" দেখানো হবে।


5. EmailAddress Attribute

EmailAddress অ্যাট্রিবিউটটি ইমেইল ফরম্যাট যাচাই করতে ব্যবহৃত হয়।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    [EmailAddress(ErrorMessage = "Invalid email address")]
    public string Email { get; set; }

    public int Age { get; set; }
}

এখানে, Email প্রপার্টি শুধুমাত্র সঠিক ইমেইল ফরম্যাটে থাকতে হবে। যদি সঠিক ফরম্যাট না হয়, তবে "Invalid email address" মেসেজ প্রদর্শিত হবে।


6. Compare Attribute

Compare অ্যাট্রিবিউটটি দুটি প্রপার্টির মান তুলনা করতে ব্যবহৃত হয়, যেমন পাসওয়ার্ড এবং কনফার্ম পাসওয়ার্ড।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    public string Name { get; set; }

    [Required]
    public string Password { get; set; }

    [Required]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

এখানে, Password এবং ConfirmPassword দুটি প্রপার্টি তুলনা করা হচ্ছে। যদি তাদের মান একই না হয়, তবে "The password and confirmation password do not match." মেসেজ দেখানো হবে।


7. DataType Attribute

DataType অ্যাট্রিবিউটটি একটি প্রপার্টির জন্য উপযুক্ত ডেটা টাইপ নির্দেশ করতে ব্যবহৃত হয়। এটি যেমন, ফোন নম্বর, ইমেইল, পাসওয়ার্ড ইত্যাদির জন্য সঠিক ফরম্যাট নির্দেশ করতে পারে।

উদাহরণ:

public class Student
{
    public int Id { get; set; }

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [DataType(DataType.Password)]
    public string Password { get; set; }
}

এখানে, Email এবং Password প্রপার্টির জন্য উপযুক্ত ডেটা টাইপ (ইমেইল এবং পাসওয়ার্ড) নির্ধারণ করা হয়েছে।


Model Validation এর প্রয়োগ

Data Annotation অ্যাট্রিবিউটগুলি Entity Framework বা ASP.NET Core এর মাধ্যমে Model Validation প্রক্রিয়ায় ব্যবহৃত হয়। আপনি যখন একটি মডেল (যেমন Student) তৈরি করেন এবং তার পর ডেটা সাবমিট করেন, তখন এগুলির মাধ্যমে স্বয়ংক্রিয়ভাবে যাচাই করা হয়। যদি কোনো প্রপার্টি ইনভ্যালিড হয়, তবে তা টেমপ্লেট বা কাস্টম মেসেজের মাধ্যমে ব্যবহারকারীকে জানানো হয়।

উদাহরণ: Model Validation এ ব্যবহার

var student = new Student { Name = "", Age = 17 };
var validationResults = new List<ValidationResult>();
var validationContext = new ValidationContext(student, null, null);

bool isValid = Validator.TryValidateObject(student, validationContext, validationResults, true);
if (!isValid)
{
    foreach (var validationResult in validationResults)
    {
        Console.WriteLine(validationResult.ErrorMessage);
    }
}

এখানে, TryValidateObject মেথড ব্যবহার করে মডেলের সব প্রপার্টি যাচাই করা হয়েছে। যদি কোনো ত্রুটি থাকে, তবে validationResults এ তা পাওয়া যাবে এবং ত্রুটি মেসেজ প্রদর্শিত হবে।


উপসংহার

Data Annotation Attribute ব্যবহার করে মডেল ভ্যালিডেশন খুবই সহজ এবং কার্যকরী একটি পদ্ধতি। এটি ডেটাবেসে বা ব্যবহারকারী ইনপুটের সময় সঠিকতা নিশ্চিত করতে সাহায্য করে। সঠিকভাবে ফিল্ড ভ্যালিডেশন প্রয়োগ করার মাধ্যমে আপনি অ্যাপ্লিকেশনটির ডেটা নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারেন।

common.content_added_by

Custom Validation Rules তৈরি

205
205

Entity Framework (EF) এবং ASP.NET Core তে Custom Validation Rules তৈরি করার মাধ্যমে আপনি আপনার মডেলগুলোর জন্য বিশেষ শর্ত বা কাস্টম ব্যতিক্রম নিয়ন্ত্রণ করতে পারেন। Entity Framework এবং ASP.NET Core মডেলগুলির জন্য Data Annotations এবং Fluent API ব্যবহার করে বৈধতা চেক করা যায়, তবে কিছু ক্ষেত্রে আপনার নিজস্ব কাস্টম লজিক প্রয়োগ করতে হয়, যা Custom Validation Attributes ব্যবহার করে করা যায়।


1. Data Annotation এর মাধ্যমে Custom Validation

Data Annotation এর মাধ্যমে আপনি মডেল প্রোপার্টির জন্য কাস্টম বৈধতা নির্ধারণ করতে পারেন। Entity Framework মডেল ক্লাসে Validation Attribute ব্যবহার করে আপনার কাস্টম শর্ত যোগ করা হয়।

কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট তৈরি

আপনি যদি কোন নির্দিষ্ট শর্তের জন্য Custom Validation করতে চান, তাহলে ValidationAttribute ক্লাসটি ইনহেরিট করে একটি কাস্টম অ্যাট্রিবিউট তৈরি করতে হবে। এতে, আপনি IsValid মেথডে আপনার কাস্টম লজিক লেখেন।

উদাহরণ: Age ফিল্ডের জন্য একটি কাস্টম ভ্যালিডেশন তৈরি করা, যা 18 বছরের নিচে বয়সে অগ্রাহ্য করবে।

public class MinAgeAttribute : ValidationAttribute
{
    private readonly int _minAge;
    
    public MinAgeAttribute(int minAge)
    {
        _minAge = minAge;
    }

    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }

        int age = (int)value;

        return age >= _minAge;
    }
}

এখন, MinAge অ্যাট্রিবিউটটি ব্যবহার করে আপনার মডেল ফিল্ডের জন্য ভ্যালিডেশন তৈরি করা যাবে:

public class User
{
    public int UserId { get; set; }

    [MinAge(18, ErrorMessage = "Age must be at least 18.")]
    public int Age { get; set; }
}

এখানে, MinAge অ্যাট্রিবিউটটি নিশ্চিত করবে যে, Age প্রপার্টি ১৮ এর কম না হয়। যদি কম হয়, তবে একটি এরর মেসেজ প্রদান করা হবে।

কাস্টম ভ্যালিডেশন ব্যবহার করা

এখন, আপনি ModelState এর মাধ্যমে কাস্টম ভ্যালিডেশন চেক করতে পারেন:

var user = new User { Age = 16 };
var validationContext = new ValidationContext(user, null, null);
var validationResults = new List<ValidationResult>();

bool isValid = Validator.TryValidateObject(user, validationContext, validationResults, true);

if (!isValid)
{
    foreach (var validationResult in validationResults)
    {
        Console.WriteLine(validationResult.ErrorMessage);
    }
}

এখানে, Validator.TryValidateObject মেথডটি ব্যবহার করা হয়েছে, যা মডেলের উপর কাস্টম ভ্যালিডেশন প্রয়োগ করে এবং ফলস্বরূপ এরর মেসেজ পাবে।


2. Fluent API এর মাধ্যমে Custom Validation

যদি আপনি Fluent API ব্যবহার করে Entity Framework এ কাস্টম ভ্যালিডেশন করতে চান, তবে আপনাকে OnModelCreating মেথডে কাস্টম লজিক প্রয়োগ করতে হবে। তবে, Data Annotations দিয়ে যে কাস্টম ভ্যালিডেশন করা হয়, তা Fluent API তে প্রোগ্রাম্যাটিক্যালি সেলফ-ডিফাইন করা যায়।

উদাহরণ: পূর্বের MinAgeAttribute কাস্টম ভ্যালিডেশন Fluent API ব্যবহার করে ইমপ্লিমেন্ট করা:

public class ApplicationDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .Property(u => u.Age)
            .HasCheckConstraint("CK_Age", "Age >= 18");
    }
}

এখানে, HasCheckConstraint ব্যবহার করে একটি SQL কন্ডিশন যুক্ত করা হয়েছে, যা নিশ্চিত করে যে Age প্রপার্টি ১৮ এর কম নয়।


3. Custom Validation for Complex Conditions

যখন আপনার ভ্যালিডেশন শর্ত আরও জটিল হয় এবং একাধিক প্রপার্টি একে অপরের ওপর নির্ভরশীল হয়, তখন আপনি কাস্টম লজিক ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি চান যে StartDate এবং EndDate এর মধ্যে নির্দিষ্ট শর্তের ভিত্তিতে ভ্যালিডেশন হতে হবে, তাহলে আপনি তা কাস্টম ভ্যালিডেশনের মাধ্যমে করতে পারবেন।

উদাহরণ: StartDate এবং EndDate এর জন্য কাস্টম ভ্যালিডেশন

public class DateRangeAttribute : ValidationAttribute
{
    private readonly string _startDateProperty;
    private readonly string _endDateProperty;

    public DateRangeAttribute(string startDateProperty, string endDateProperty)
    {
        _startDateProperty = startDateProperty;
        _endDateProperty = endDateProperty;
    }

    public override bool IsValid(object value)
    {
        var startDateProperty = value.GetType().GetProperty(_startDateProperty);
        var endDateProperty = value.GetType().GetProperty(_endDateProperty);

        if (startDateProperty == null || endDateProperty == null)
        {
            return false;
        }

        var startDate = (DateTime?)startDateProperty.GetValue(value);
        var endDate = (DateTime?)endDateProperty.GetValue(value);

        if (startDate.HasValue && endDate.HasValue)
        {
            return startDate <= endDate;
        }

        return true;
    }
}

এখানে, DateRangeAttribute অ্যাট্রিবিউটটি নিশ্চিত করে যে, StartDate এর আগে EndDate হবে না।

ব্যবহার:

public class Event
{
    public int EventId { get; set; }

    public DateTime StartDate { get; set; }
    
    public DateTime EndDate { get; set; }

    [DateRange("StartDate", "EndDate", ErrorMessage = "End Date must be greater than or equal to Start Date.")]
    public string EventName { get; set; }
}

এখানে, StartDate এবং EndDate একে অপরের উপর নির্ভরশীল হওয়ায় কাস্টম ভ্যালিডেশন লাগানো হয়েছে।


4. Client-side Validation Integration

ASP.NET Core এ, আপনি কাস্টম ভ্যালিডেশন শুধুমাত্র সার্ভার সাইডে নয়, বরং Client-side Validation সাথেও একত্রে ব্যবহার করতে পারেন। এটি jQuery Validation বা Unobtrusive Validation ব্যবহার করে করা যেতে পারে।

উদাহরণ: ক্লায়েন্ট সাইডে কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট যোগ করা:

<input type="text" id="age" name="age" data-val="true" data-val-minage="Age must be at least 18" />

এখানে, data-val-minage ব্যবহার করে কাস্টম ভ্যালিডেশন মেসেজ যুক্ত করা হয়েছে।


সারাংশ

Custom Validation Rules তৈরি করার মাধ্যমে আপনি আপনার মডেলগুলিতে প্রোগ্রাম্যাটিক্যালি বিশেষ শর্ত প্রয়োগ করতে পারবেন, যা ডেটার সঠিকতা নিশ্চিত করে এবং ইউজারের ভুল ইনপুট থেকে নিরাপত্তা প্রদান করে। Data Annotations এবং Fluent API ব্যবহার করে আপনি খুব সহজেই কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন এবং প্রয়োজনে ক্লায়েন্ট-সাইড ভ্যালিডেশনও ইন্টিগ্রেট করতে পারেন।

common.content_added_by

Fluent API দিয়ে Validation Configuration

202
202

Entity Framework (EF) Core এ, মডেল বৈধতা (validation) কনফিগার করার জন্য দুটি প্রধান পদ্ধতি রয়েছে: Data Annotations এবং Fluent API। যেখানে Data Annotations দিয়ে বৈধতা কনফিগার করা যায় মডেল ক্লাসের প্রপার্টিতে সরাসরি অটোমেটিকভাবে, সেখানে Fluent API একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে, যা বিশেষ কনফিগারেশন ও কমপ্লেক্স বৈধতা নিয়ম তৈরি করতে সক্ষম।

Fluent API দিয়ে বৈধতা কনফিগারেশন করার সময় আপনি অনেক ধরনের শর্ত, সীমানা (constraints), এবং সম্পর্কের মডেল কনফিগারেশন সেট করতে পারবেন, যা ডেটাবেসের স্তরে সম্পাদিত হয় এবং কোডে আরও কাস্টমাইজডভাবে বৈধতা পরিচালনা করতে সহায়তা করে।


1. Required Validation

যেকোনো প্রপার্টি যদি Required (অবশ্যই পূর্ণাঙ্গ হতে হবে) হতে হয়, তাহলে আপনি Fluent API এর IsRequired() মেথড ব্যবহার করে এই শর্তটি প্রয়োগ করতে পারেন।

উদাহরণ:

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .Property(s => s.Name)
            .IsRequired();  // Name প্রপার্টি অবশ্যই পূর্ণাঙ্গ হতে হবে
    }
}

এখানে, Name প্রপার্টি Required হিসেবে কনফিগার করা হয়েছে, যার মানে এটি null হতে পারবে না।


2. String Length Validation

StringLength বৈধতা সেট করার জন্য, Fluent API-তে HasMaxLength() এবং HasMinLength() মেথড ব্যবহার করা হয়। এতে আপনি প্রপার্টির সর্বোচ্চ এবং সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করতে পারবেন।

উদাহরণ:

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .Property(s => s.Name)
            .HasMaxLength(100)  // Name প্রপার্টির সর্বোচ্চ দৈর্ঘ্য 100 চরিত্র
            .HasMinLength(5);   // Name প্রপার্টির সর্বনিম্ন দৈর্ঘ্য 5 চরিত্র
    }
}

এখানে, Name প্রপার্টির সর্বোচ্চ দৈর্ঘ্য 100 এবং সর্বনিম্ন দৈর্ঘ্য 5 চরিত্র নির্ধারণ করা হয়েছে।


3. Range Validation

Fluent API দিয়ে Range বৈধতা কনফিগার করার জন্য HasRange() মেথড ব্যবহার করা হয়। এটি একটি প্রপার্টির মান সীমাবদ্ধ করতে সাহায্য করে, যেমন একটি বয়সের ক্ষেত্রের মধ্যে পরিসীমা নির্ধারণ করা।

উদাহরণ:

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .Property(s => s.Age)
            .HasRange(18, 60);  // Age প্রপার্টির পরিসীমা 18 থেকে 60 এর মধ্যে হবে
    }
}

এখানে, Age প্রপার্টির মান 18 থেকে 60 এর মধ্যে হতে হবে।


4. Regular Expression (Regex) Validation

Fluent API এর মাধ্যমে Regular Expression (regex) কনফিগার করা যায়, যাতে একটি প্রপার্টি নির্দিষ্ট প্যাটার্নে মান গ্রহণ করে। এটি নাম, ফোন নম্বর বা ইমেইল এর মতো ফিল্ডের জন্য বিশেষভাবে উপযোগী।

উদাহরণ:

public class Student
{
    public int StudentId { get; set; }
    public string Email { get; set; }
}

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .Property(s => s.Email)
            .HasDefaultValue("")
            .HasMaxLength(200)
            .HasColumnType("nvarchar")
            .IsRequired()
            .HasComment("Student's Email Address")
            .HasAnnotation("Unique", true);  
    }
}

এখানে email প্রপার্টির মাধ্যমে সেট করা হয়েছে যে কোনো রেকর্ড এর email ভ্যালিড হতে হবে, regex দিয়ে নিয়ম উল্লেখ করা হতে পারে।

common.content_added_by

Client-side এবং Server-side Validation Integration

232
232

Client-side validation এবং Server-side validation দুটি ভিন্ন ধরনের ডেটা যাচাইকরণ প্রক্রিয়া, যেগুলি web অ্যাপ্লিকেশনগুলিতে ডেটার সঠিকতা নিশ্চিত করতে ব্যবহৃত হয়। এই দুটি যাচাইকরণ প্রক্রিয়া একে অপরকে পরিপূরক হিসেবে কাজ করে, যেখানে client-side validation ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং server-side validation সিকিউরিটি এবং ডেটা ইন্টেগ্রিটি নিশ্চিত করে।

Entity Framework (EF) এবং ASP.NET Core সহ অন্যান্য টেকনোলজির সাথে Client-side এবং Server-side validation একত্রে ব্যবহার করলে একটি শক্তিশালী এবং নিরাপদ validation সিস্টেম তৈরি করা সম্ভব।


Client-side Validation

Client-side validation সাধারণত JavaScript বা jQuery ব্যবহার করে করা হয়, যা ব্যবহারকারীর ব্রাউজারে ফর্ম ডেটা যাচাই করে। এটি ফর্ম সাবমিট হওয়ার আগে ব্যবহারকারীকে ত্রুটি বা ভুল তথ্য জানানোর জন্য কার্যকর। এর প্রধান সুবিধা হল তা সরাসরি ব্যবহারকারীর ডিভাইসে ঘটে, ফলে সিস্টেমের সার্ভার লোড কমে এবং ইউজার ইন্টারঅ্যাকশন দ্রুত হয়।

ASP.NET Core তে jQuery Validation প্লাগিন সাধারণত ব্যবহার করা হয়, যা ক্লায়েন্ট সাইডে ডেটা ভ্যালিডেশন বাস্তবায়ন করে।

Example: Client-side Validation with jQuery

<form id="myForm">
    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required />
    
    <label for="password">Password:</label>
    <input type="password" id="password" name="password" required minlength="6" />

    <button type="submit">Submit</button>
</form>

<script>
    $(document).ready(function() {
        $("#myForm").validate({
            rules: {
                email: {
                    required: true,
                    email: true
                },
                password: {
                    required: true,
                    minlength: 6
                }
            },
            messages: {
                email: {
                    required: "Please enter an email address",
                    email: "Please enter a valid email"
                },
                password: {
                    required: "Please enter a password",
                    minlength: "Password must be at least 6 characters"
                }
            }
        });
    });
</script>

এখানে, jQuery Validation প্লাগিন ব্যবহার করে আমরা ফর্মের ইনপুট ভ্যালিডেশন করেছি। যখন ব্যবহারকারী ফর্মটি সাবমিট করার চেষ্টা করবে, তখন email এবং password এর জন্য ত্রুটি বার্তা দেখানো হবে যদি তা সঠিক না হয়।


Server-side Validation

Server-side validation হল যখন ফর্মের ডেটা সার্ভারে পাঠানো হয় এবং সার্ভার সাইডে তা যাচাই করা হয়। এটি ব্যবহারকারীর ইনপুটের উপর প্রোগ্রাম্যাটিক যাচাইকরণ করে এবং ত্রুটির ক্ষেত্রে সংশোধন প্রক্রিয়া চালায়। Server-side validation এর মূল সুবিধা হল এটি নিরাপত্তা নিশ্চিত করে, কারণ ক্লায়েন্ট সাইডের ভ্যালিডেশন সহজে বাইপাস করা যেতে পারে, কিন্তু সার্ভার সাইড যাচাইকরণ বাইপাস করা সম্ভব নয়।

ASP.NET Core তে Data Annotations ব্যবহার করে server-side validation করা যেতে পারে। Model এর উপরে Data Annotations যোগ করা হয়, যা কনফিগারেশন এবং সঠিকতা নিশ্চিত করে।

Example: Server-side Validation in ASP.NET Core

public class UserModel
{
    [Required(ErrorMessage = "Email is required.")]
    [EmailAddress(ErrorMessage = "Invalid email format.")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Password is required.")]
    [MinLength(6, ErrorMessage = "Password must be at least 6 characters long.")]
    public string Password { get; set; }
}

public class UserController : Controller
{
    [HttpPost]
    public IActionResult Register(UserModel model)
    {
        if (ModelState.IsValid)
        {
            // Process registration
            return RedirectToAction("Success");
        }

        // Return to the same view with validation errors
        return View(model);
    }
}

এখানে, UserModel ক্লাসে Data Annotations ব্যবহার করা হয়েছে। ফর্ম সাবমিট হওয়ার পর ModelState.IsValid চেক করে, যদি মডেল বৈধ না হয়, তাহলে ত্রুটি বার্তাগুলি View তে প্রদর্শিত হবে।


Client-side এবং Server-side Validation এর মধ্যে Integration

যখন আমরা client-side এবং server-side validation একত্রে ব্যবহার করি, তখন একটি দুই স্তরের যাচাইকরণ প্রক্রিয়া তৈরি হয়। এখানে, client-side validation ব্যবহারকারীর কাছে দ্রুত ত্রুটি বার্তা পাঠিয়ে তাদের টাইম সেভ করতে সাহায্য করে, এবং server-side validation নিশ্চিত করে যে, সব ইনপুট ডেটা সঠিক এবং নিরাপদ। এটি একে অপরকে পরিপূরক হিসেবে কাজ করে।

Example: Full Integration of Client-side and Server-side Validation

<form id="registrationForm" method="post" asp-action="Register">
    <label for="email">Email:</label>
    <input type="email" id="email" name="Email" required />

    <label for="password">Password:</label>
    <input type="password" id="password" name="Password" required minlength="6" />

    <button type="submit">Submit</button>
</form>

<script>
    $(document).ready(function () {
        $("#registrationForm").validate({
            rules: {
                email: {
                    required: true,
                    email: true
                },
                password: {
                    required: true,
                    minlength: 6
                }
            },
            messages: {
                email: {
                    required: "Please enter an email address",
                    email: "Please enter a valid email address"
                },
                password: {
                    required: "Please enter a password",
                    minlength: "Password must be at least 6 characters"
                }
            }
        });
    });
</script>

ASP.NET Core Controller (Server-side Validation)

public class UserModel
{
    [Required(ErrorMessage = "Email is required.")]
    [EmailAddress(ErrorMessage = "Invalid email format.")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Password is required.")]
    [MinLength(6, ErrorMessage = "Password must be at least 6 characters long.")]
    public string Password { get; set; }
}

public class UserController : Controller
{
    [HttpPost]
    public IActionResult Register(UserModel model)
    {
        if (ModelState.IsValid)
        {
            // Process registration
            return RedirectToAction("Success");
        }

        // Return to the same view with validation errors
        return View(model);
    }
}

এখানে, client-side validation ব্যবহারকারীর ইনপুট ত্রুটির জন্য তৎক্ষণাৎ প্রতিক্রিয়া দেখায় এবং server-side validation নিশ্চিত করে যে, ডেটাবেসে নিরাপদ এবং সঠিক ডেটা সংরক্ষিত হচ্ছে। ফলে, আপনার অ্যাপ্লিকেশন শক্তিশালী এবং সুরক্ষিত হয়।


সারাংশ

Client-side validation ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং দ্রুত ত্রুটি বার্তা প্রদান করে, যেখানে server-side validation ডেটার সঠিকতা এবং নিরাপত্তা নিশ্চিত করে। এই দুটি একত্রে ব্যবহার করার ফলে আপনার অ্যাপ্লিকেশন দ্রুত, নিরাপদ এবং ব্যবহারকারী-বান্ধব হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion